const apiUrl = import.meta.env.VITE_API_URL;

// 封装身份验证请求函数
const authentication = {
    // Token管理方法
    setToken: (token) => {
        localStorage.setItem('token', token);
    },
    
    getToken: () => {
        return localStorage.getItem('token');
    },
    
    removeToken: () => {
        localStorage.removeItem('token');
    },
    
    // 封装 fetch 作为基础请求函数
    fetch: async (url, data) => {
        // 构建请求头
        const headers = {
            'Content-Type': 'application/json'
        };
        
        // 如果存在token，添加到请求头
        const token = authentication.getToken();
        if (token) {
            headers['Authorization'] = `Bearer ${token}`;
        }
        
        return await fetch(`${apiUrl}${url}`, {
            method: 'POST',
            headers: headers,
            body: JSON.stringify(data)
        })
            .then((res) => {
            if (!res.ok) {
                console.error('Request error:', res.statusText);
                throw new Error(`HTTP ${res.status}: ${res.statusText}`);
            }
            return res.json();
        })
            .then((res) => {
                if (res.code !== 200) {
                    console.error('Request error: Code', res.code);
                    return { success: false, error: res.error }; // 返回具体的错误信息
                }
                return { success: true, data: res.data };
            })
            .catch((error) => {
                console.error('Request error:', error);
                return { success: false, error: error.message || '未知错误' }; // 返回捕获的错误信息
            });
    },
    // 封装 login 请求
    login: async (data) => {
        const result = await authentication.fetch('/auth/login', data);
        // 如果登录成功且返回了token，自动存储
        // 根据服务器返回格式：data.token
        if (result.success && result.data && result.data.token) {
            authentication.setToken(result.data.token);
        }
        return result;
    },
    // 封装 register 请求
    register: async (data) => {
        const response = await authentication.fetch('/auth/register', data);
        return response;
    }
};

export default authentication;
